DEFINITION MODULE  MACHINE;

(*****************************************************************************)
(* Dieses Modul ist nur was fuer Spezialisten; da diese ohnehin wissen soll- *)
(* ten, was mit diesen Prozeduren angerichtet werden kann, folgt hier auch   *)
(* keine grosse Erlaeuterung...                                              *)
(*___________________________________________________________________________*)
(*    05-Mae-90 , Holger Kleinschmidt                                        *)
(*****************************************************************************)

FROM  SYSTEM  IMPORT  (* TYPE *) BYTE, ADDRESS;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)

TYPE
       CPUMode = ( USER, SUPERVISOR );

       IRLevel = ( IPL0, IPL1, IPL2, IPL3, IPL4, IPL5, IPL6, IPL7 );

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)


  PROCEDURE  ReadSysMem  ((* EIN/ -- *)     adr  : LONGCARD;
                          (* -- /AUS *) VAR wert : ARRAY OF BYTE );

  PROCEDURE  WriteSysMem ((* EIN/ -- *) adr  : LONGCARD;
                          (* EIN/ -- *) wert : ARRAY OF BYTE );

 (*-------------------------------------------------------------------------
  | Mithilfe dieser Prozeduren kann auf RAM-Bereiche zugegriffen werden, die|
  | nur im Supervisormodus der CPU zugaenglich sind, also der Bereich der   |
  | Systemvariablen.                                                        |
  | <adr> darf ungerade sein; es ist egal, in welchem Modus die CPU beim    |
  | Aufruf dieser Prozeduren ist. Es werden  HIGH( wert )+1 Bytes  ueber-   |
  | tragen.                                                                 |
   -------------------------------------------------------------------------*)


  PROCEDURE  BREAKPOINT; CODE( 4E4AH );

 (*-------------------------------------------------------------------------
  | Solange das MODULA-System unter Kontrolle des Laders laeuft, fuehrt     |
  | TRAP #10 zur Unterbrechung des Programms mit Moeglichkeit zum Aufruf    |
  | des Debuggers; scheint die gleiche Wirkung wie ein HALT zu haben.       |
   -------------------------------------------------------------------------*)

(*===========================================================================

  Die folgenden Prozeduren sind nur was fuer Leute, die genau wissen,
  was sie damit erreichen wollen !!

  ===========================================================================*)


  PROCEDURE  CurrentCPUMode ( ): CPUMode;

 (*-------------------------------------------------------------------------
  | Liefert den momentanen CPU-Modus                                        |
   -------------------------------------------------------------------------*)


  PROCEDURE  SuperOn;

  PROCEDURE  SuperOff;

 (*-------------------------------------------------------------------------
  | Schalten den Supervisormodus ein bzw. aus.                              |
  | Die beiden Prozeduren duerfen nur auf einer Ebene als 'Klammer' benutzt |
  | werden, d.h. innerhalb einer Prozedur: "SuperOn"..."SuperOff". Innerhalb|
  | dieses priviligierten Abschnitts duerfen also auch keine Prozeduren     |
  | aufgerufen werden, die selber den Modus aendern, denn mit dem ersten    |
  | auftretenden "SuperOff" ist wieder der Usermodus eingeschaltet.         |
   -------------------------------------------------------------------------*)


  PROCEDURE  CurrentIRLevel ( ): IRLevel;

  PROCEDURE  SetIRLevel ((* EIN/ -- *) irlevel : IRLevel );

 (*-------------------------------------------------------------------------
  | Fragt die aktuelle Prioritaetsebene der CPU ab, bzw. setzt sie.         |
  | Mit IPL6 bzw. IPL7 koennen z.B. saemtliche Interrupts unterbunden wer-  |
  | den: wird der IR-Level allerdings nachher nicht wieder auf IPL3 runter- |
  | gesetzt, kann man sich auch aus dem System ausblenden - auf den Tasta-  |
  | tur-IR wird dann naemlich auch nicht mehr reagiert...                   |
  | Mit IPL1 koennen die Horizantalblank-IRs des Videochips zugelassen wer- |
  | den - da hierdurch vor allem bei Schwarzweiss-Monitor ein erheblicher   |
  | Teil der CPU-Kapazitaet beansprucht wird, laeuft alles im Schnecken-    |
  | tempo ab.                                                               |
   -------------------------------------------------------------------------*)

END  MACHINE.
